package com.itheima.d3_stream;

import java.util.*;
import java.util.stream.Stream;

/**
 * 目标：掌握Stream流的创建。
 *
 * 1、List和Set集合都是Collection的子类型，都可以直接使用Stream()方法获取流
 * 2、Map双列集合没有直接获取流的方法，需要转换为单列集合
 *      KeySet       处理键
 *      values       处理值
 *      entrySet     处理键和值数据
 *
 * 数组：
 *   (1）Arrays.stream(数组)
 *   (2)Stream.of(数组)
 */
public class StreamTest2 {
    public static void main(String[] args) {
        // 1、如何获取List集合的Stream流？
        List<String> names = new ArrayList<>();
        Collections.addAll(names, "张三丰","张无忌","周芷若","赵敏","张强");
        Stream<String> stream = names.stream();
//        names.stream()
//                .forEach(System.out::println);

        System.out.println("=================");

        // 2、如何获取Set集合的Stream流？
        Set<String> set = new HashSet<>();
        Collections.addAll(set, "刘德华","张曼玉","蜘蛛精","马德","德玛西亚");
        Stream<String> stream1 = set.stream();
        stream1.filter(s -> s.contains("德")).forEach(s -> System.out.println(s));
//        set.stream()
//                .forEach(System.out::println);

        System.out.println("=============");

        // 3、如何获取Map集合的Stream流？
        Map<String, Double> map = new HashMap<>();
        map.put("古力娜扎", 172.3);
        map.put("迪丽热巴", 168.3);
        map.put("马尔扎哈", 166.3);
        map.put("卡尔扎巴", 168.3);

        //处理键
        map.keySet().stream().forEach(System.out::println);
        //处理值
        map.values().stream().forEach(System.out::println);
        //处理键和值
        map.entrySet().stream().forEach(entry-> System.out.println(entry.getKey() + " --->" + entry.getValue()));


        System.out.println("============");

        // 4、如何获取数组的Stream流？
        String[] names2 = {"张翠山", "东方不败", "唐大山", "独孤求败"};
        //方案一
        Arrays.stream(names2).forEach(System.out::println);

        System.out.println("=============");

        //方案二
        Stream.of(names2).forEach(System.out::println);

    }
}
